/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ar.com.remiseria.frame;

import ar.com.remiseria.bo.CuentaCorrienteClienteBO;
import ar.com.remiseria.entities.CuentaCorriente;
import ar.com.remiseria.entities.CuentaCorrienteCliente;
import ar.com.remiseria.utils.Constantes;
import ar.com.remiseria.utils.PropertiesReader;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author mcvalls
 */
public class AdministracionDeCuentaCorrienteClienteFrame extends javax.swing.JFrame {

    private List<CuentaCorrienteCliente> listaCuentasCorrientes = new ArrayList<CuentaCorrienteCliente>();
    private int paginaActual = 1;
    private int paginasTotales = 1;
    
    /**
     * Creates new form AdministracionDeCuentaCorrienteCliente
     */
    public AdministracionDeCuentaCorrienteClienteFrame() {
        initComponents();
        this.getCuentasCorrientes();
        this.verificarPaginado();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        cuentasCorrientesTable = new javax.swing.JTable();
        nuevaCuentaCorrienteBtn = new javax.swing.JButton();
        pagAnteriorBtn = new javax.swing.JButton();
        pagSiguienteBtn = new javax.swing.JButton();
        paginasLbl = new javax.swing.JLabel();
        verDetalleCuentaCorrienteBtn = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        nuevaCuentaCorrienteMenuBtn = new javax.swing.JMenuItem();
        verDetalleCuentaCorrienteMenuBtn = new javax.swing.JMenuItem();
        ayudaMenu = new javax.swing.JMenu();
        acercaDeMenuBtn = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        cuentasCorrientesTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(cuentasCorrientesTable);

        nuevaCuentaCorrienteBtn.setText("Nueva Cuenta Corriente");
        nuevaCuentaCorrienteBtn.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
        nuevaCuentaCorrienteBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nuevaCuentaCorrienteBtnActionPerformed(evt);
            }
        });

        pagAnteriorBtn.setText("Ant");
        pagAnteriorBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pagAnteriorBtnActionPerformed(evt);
            }
        });

        pagSiguienteBtn.setText("Sig");
        pagSiguienteBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pagSiguienteBtnActionPerformed(evt);
            }
        });

        paginasLbl.setText("Pagina X de Y");

        verDetalleCuentaCorrienteBtn.setText("Ver Detalle Cuenta Corriente");
        verDetalleCuentaCorrienteBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                verDetalleCuentaCorrienteBtnActionPerformed(evt);
            }
        });

        jMenu1.setText("Menu");

        nuevaCuentaCorrienteMenuBtn.setText("Nueva cuenta corriente");
        nuevaCuentaCorrienteMenuBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nuevaCuentaCorrienteMenuBtnActionPerformed(evt);
            }
        });
        jMenu1.add(nuevaCuentaCorrienteMenuBtn);

        verDetalleCuentaCorrienteMenuBtn.setText("Ver detalle cuenta seleccionada");
        verDetalleCuentaCorrienteMenuBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                verDetalleCuentaCorrienteMenuBtnActionPerformed(evt);
            }
        });
        jMenu1.add(verDetalleCuentaCorrienteMenuBtn);

        jMenuBar1.add(jMenu1);

        ayudaMenu.setText("Ayuda");

        acercaDeMenuBtn.setText("Acerca de...");
        acercaDeMenuBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                acercaDeMenuBtnActionPerformed(evt);
            }
        });
        ayudaMenu.add(acercaDeMenuBtn);

        jMenuBar1.add(ayudaMenu);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 769, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(pagAnteriorBtn)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(paginasLbl)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(pagSiguienteBtn))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(nuevaCuentaCorrienteBtn)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(verDetalleCuentaCorrienteBtn)))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pagAnteriorBtn)
                    .addComponent(pagSiguienteBtn)
                    .addComponent(paginasLbl))
                .addGap(28, 28, 28)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nuevaCuentaCorrienteBtn)
                    .addComponent(verDetalleCuentaCorrienteBtn))
                .addContainerGap(65, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void pagSiguienteBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pagSiguienteBtnActionPerformed
        paginaActual++;
        this.getCuentasCorrientes();
        this.verificarPaginado();        
    }//GEN-LAST:event_pagSiguienteBtnActionPerformed

    private void pagAnteriorBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pagAnteriorBtnActionPerformed
        paginaActual--;
        this.getCuentasCorrientes();
        this.verificarPaginado();
    }//GEN-LAST:event_pagAnteriorBtnActionPerformed

    private void nuevaCuentaCorrienteBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nuevaCuentaCorrienteBtnActionPerformed
        this.irANuevaCuentaCorrienteCliente();
    }//GEN-LAST:event_nuevaCuentaCorrienteBtnActionPerformed

    private void nuevaCuentaCorrienteMenuBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nuevaCuentaCorrienteMenuBtnActionPerformed
        this.irANuevaCuentaCorrienteCliente();
    }//GEN-LAST:event_nuevaCuentaCorrienteMenuBtnActionPerformed

    private void verDetalleCuentaCorrienteBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_verDetalleCuentaCorrienteBtnActionPerformed
        this.irAVerDetalleCuentaCorriente();
    }//GEN-LAST:event_verDetalleCuentaCorrienteBtnActionPerformed

    private void verDetalleCuentaCorrienteMenuBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_verDetalleCuentaCorrienteMenuBtnActionPerformed
        this.irAVerDetalleCuentaCorriente();
    }//GEN-LAST:event_verDetalleCuentaCorrienteMenuBtnActionPerformed

    private void acercaDeMenuBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_acercaDeMenuBtnActionPerformed
        this.mostrarAcercaDeAdministracionCtaCteCliente();
    }//GEN-LAST:event_acercaDeMenuBtnActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeCuentaCorrienteClienteFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeCuentaCorrienteClienteFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeCuentaCorrienteClienteFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeCuentaCorrienteClienteFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AdministracionDeCuentaCorrienteClienteFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem acercaDeMenuBtn;
    private javax.swing.JMenu ayudaMenu;
    private javax.swing.JTable cuentasCorrientesTable;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton nuevaCuentaCorrienteBtn;
    private javax.swing.JMenuItem nuevaCuentaCorrienteMenuBtn;
    private javax.swing.JButton pagAnteriorBtn;
    private javax.swing.JButton pagSiguienteBtn;
    private javax.swing.JLabel paginasLbl;
    private javax.swing.JButton verDetalleCuentaCorrienteBtn;
    private javax.swing.JMenuItem verDetalleCuentaCorrienteMenuBtn;
    // End of variables declaration//GEN-END:variables

    private void getCuentasCorrientes() {
        CuentaCorrienteClienteBO cuentaCorrienteClienteBO = new CuentaCorrienteClienteBO();
        
        try{
            listaCuentasCorrientes = cuentaCorrienteClienteBO.getAllCuentaContableCliente(paginaActual);
        }catch(Exception ex){
            ex.printStackTrace();
            JOptionPane.showMessageDialog(this, ex);
        }
        
        DefaultTableModel model = new DefaultTableModel();
        model.addColumn("Codigo");
        model.addColumn("Cliente");
        model.addColumn("Debe");
        model.addColumn("Haber");
        model.addColumn("Saldo");        
        
        if(listaCuentasCorrientes != null && !listaCuentasCorrientes.isEmpty()){
            for(CuentaCorrienteCliente ccc : listaCuentasCorrientes){
                Object[] cuentas = new Object[5];
                cuentas[1] = ccc.getCodigo();
                cuentas[2] = ccc.getCliente().getTelefono();
                cuentas[3] = ccc.getDebe();
                cuentas[4] = ccc.getHaber();
                cuentas[5] = ccc.getSaldo();
                
                model.addRow(cuentas);
            }
        }else if(listaCuentasCorrientes.isEmpty()){
            String[] info = new String[1];
            info[0] = "No se encontraron resultados";
            model = new DefaultTableModel();
            model.addColumn("Info");
            model.addRow(info);
        }
        
        
        cuentasCorrientesTable.setModel(model);
    }

    private void verificarPaginado() {
        CuentaCorrienteClienteBO cuentaCorrienteClienteBO = new CuentaCorrienteClienteBO();
        int cuentasTotales = 0;
        
        try{
            cuentasTotales = cuentaCorrienteClienteBO.getCuentaCorrienteClienteCount(); 
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
        if(cuentasTotales != 0){
            int cantidadPaginas = cuentasTotales % Constantes.PAG_MAX_RESULTS;
            if(cantidadPaginas == 0){
                cantidadPaginas = cuentasTotales / Constantes.PAG_MAX_RESULTS;
            }else{
                cantidadPaginas = (cuentasTotales / Constantes.PAG_MAX_RESULTS) + 1;
            }
            paginasTotales = cantidadPaginas;
        }
        
        paginasLbl.setText("Pagina "+paginaActual+" de "+paginasTotales);
        
        if(paginaActual == 1){
            pagAnteriorBtn.setEnabled(false);
        }else{
            pagAnteriorBtn.setEnabled(true);
        }
        
        if(paginaActual == paginasTotales){
            pagSiguienteBtn.setEnabled(false);
        }else{
            pagSiguienteBtn.setEnabled(true);
        }
    }

    private void irANuevaCuentaCorrienteCliente() {
        AltaCuentaCorrienteClienteFrame nccc = new AltaCuentaCorrienteClienteFrame();
        nccc.setVisible(true);
        this.dispose();
    }

    private void irAVerDetalleCuentaCorriente() {
        DetalleCuentaCorrienteClienteFrame dccc = new DetalleCuentaCorrienteClienteFrame();
        dccc.setVisible(true);
        this.dispose();
        
    }

    private void mostrarAcercaDeAdministracionCtaCteCliente() {
        JOptionPane.showMessageDialog(this, 
                PropertiesReader.getInstance().getApplicationMessage("ayuda.acerca.altaCuentaCorrienteCliente"));
    }
}
